package lianbiao;

public class fanzhuanlianbiao {
    public ListNode reverseBetween(ListNode head, int left, int right) {
        ListNode tem=new ListNode(-1);
        tem.next=head;
        ListNode s=head;
        ListNode l=tem;
        for(int i=0;i<left-1;i++){
            l=l.next;
        }
        ListNode r=l;
        for(int i=0;i<right-left+1;i++){
            r=r.next;
        }
        ListNode cur=r.next;
        ListNode left1=l.next;
        l.next=null;
        r.next=null;
        reverseLinkedList(left1);
        l.next=r;
        left1.next=cur;
        return s;
    }
    private void reverseLinkedList(ListNode head) {
        // 也可以使用递归反转一个链表
        ListNode pre = null;
        ListNode cur = head;

        while (cur != null) {
            ListNode next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
    }
}
